var mongodb = require("./db.ts");
var ObjectID = require("mongodb").ObjectID;

const tableName = "SysRbac_Users";

function User(user) {
  this.name = user.name;
  this.tel = user.tel;
  this.password = user.password;
  this.email = user.email;
  this.role = user.role;
  this.department = user.department;
}

//存储用户信息
User.prototype.save = function (databaseName, callback) {
  //要存入数据库的用户文档
  var user = {
    name: this.name,
    tel: this.tel,
    password: this.password,
    email: this.email,
    role: this.role,
    department: this.department,
  };
  //打开数据库
  mongodb.connect(function (err) {
    if (err) {
      return callback(err);
      //错误，返回 err 信息
    }
    //读取 users 集合
    const DataBase = mongodb.db(databaseName); // 获取数据库
    DataBase.collection(tableName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      //将用户数据插入 users 集合
      collection.insert(user, { safe: true }, function (err, user) {
        if (err) {
          return callback(err);
          //错误，返回 err 信息
        }
        callback(null, user.ops[0]);
        //成功！err 为 null，并返回存储后的用户文档
      });
    });
  });
};
//读取用户信息
User.get = function (name, databaseName, callback) {
  //读取 users 集合
  mongodb.connect((error) => {
    if (error) {
      throw error;
    }
    try {
      const DataBase = mongodb.db(databaseName); // 获取数据库
      DataBase.collection(tableName, function (err, collection) {
        if (err) {
          return callback(err);
          //错误，返回 err 信息
        }
        //查找用户名（name键）值为 name 一个文档
        collection.findOne({ name: name }, function (err, user) {
          if (err) {
            return callback(err);
            //失败！返回 err 信息
          }
          callback(null, user);
          //成功！返回查询的用户信息
        });
      });
    } catch (error) {
      callback(error);
    }
  });
};

User.getAllData = function (dataBaseName, callback) {
  //打开数据库
  mongodb.connect((error) => {
    if (error) {
      throw error;
    }
    const DataBase = mongodb.db(dataBaseName); // 获取数据库
    DataBase.collection(tableName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      var query = {};
      //根据 query 对象查询文章
      collection
        .find(query)
        .sort({ time: -1 })
        .toArray(function (err, objects) {
          if (err) {
            return callback(err); //失败！返回 err
          }
          callback(null, objects); //成功！以数组形式返回查询的结果
        });
    });
  });
};

User.findUserById = function (userId, dataBaseName, callback) {
  //读取 users 集合
  mongodb.connect((error) => {
    if (error) {
      return callback(error);
    }
    const DataBase = mongodb.db(dataBaseName); // 获取数据库
    DataBase.collection(tableName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      //查找用户名（name键）值为 name 一个文档
      collection.findOne({ _id: ObjectID(userId) }, function (err, user) {
        if (err) {
          return callback(err);
          //失败！返回 err 信息
        }
        callback(null, user);
        //成功！返回查询的用户信息
      });
    });
  });
};

User.update = function (id, object, dataBaseName, callback) {
  //打开数据库
  mongodb.connect(function (err) {
    if (err) {
      return callback(err);
      //错误，返回 err 信息
    }
    const DataBase = mongodb.db(dataBaseName); // 获取数据库
    DataBase.collection(tableName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      //生成一个实体配置信息
      collection.updateOne(
        { _id: ObjectID(id) },
        { $set: object },
        function (err) {
          if (err) {
            return callback(err);
          }
          callback(null, { ...object, _id: id });
        }
      );
    });
  });
};

User.deleteById = function (id, dataBaseName, callback) {
  //打开数据库
  mongodb.connect((error) => {
    if (error) {
      throw error;
    }
    const DataBase = mongodb.db(dataBaseName); // 获取数据库
    DataBase.collection(tableName, function (err, collection) {
      if (err) {
        return callback(err);
        //错误，返回 err 信息
      }
      var query = { _id: "" };
      if (id) {
        query._id = ObjectID(id);
      }
      //根据 query 对象查询文章
      collection.deleteOne(query);
      callback(null); //删除成功
    });
  });
};

module.exports = User;
